package com.zql.LeetCode;

import com.zql.baseEntity.ListNode;

/**
 * Created By ShuHua on 2021/8/26.
 */
public class GetIntersectionNode_160 {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode p1 = headA;
        ListNode p2 = headB;
        while(p1!=p2){
            if(p1==null) p1=headB;
            else p1=p1.next;
            if(p2==null) p2=headA;
            else p2=p2.next;
        }
        return p1;
    }
    public ListNode getIntersectionNode_error(ListNode headA, ListNode headB) {
        ListNode p1 = headA;
        ListNode p2 = headB;
        while(p1!=null&&p2!=null){
            if(p1==p2) return p1;
            if(p1.next==null) p1=headB;
            else p1=p1.next;
            if(p2.next==null) p2=headA;
            else p2=p2.next;
        }
        return null;
        //这种写法，在碰到链表不相交的情况下，p1和p2永不为空，while死循环
    }
    public ListNode getIntersectionNode_error2(ListNode headA, ListNode headB) {
        ListNode p1 = headA;
        ListNode p2 = headB;
        while(p1!=p2){
            //不能使用p.next==null 来判断 因为两个相同长度不相交的链表在最后一个不为空的结点时就直接将另一个链表赋值给p，导致循环永不结束。
            if(p1.next==null) p1=headB;
            else p1=p1.next;
            if(p2.next==null) p2=headA;
            else p2=p2.next;
        }
        return p1;

    }

}
